/* PROJECTO: Projecto 3
 * FICHEIRO: tabuleiro.h
 *
 * DESCRIÇÃO: Codigo correspondente ao tabuleiro.
 *            
 *
 * TURMA / GRUPO: Turma 1 / Grupo 12
 * AUTORES: Fábio Domingo da Silva Rodrigues
 *          Rolando Emanuel Lopes Pereira
 *
 * DECLARAÇÃO:
 * Declaramos sob compromisso de honra que este trabalho nas suas partes
 * constituintes de código (e relatório, se aplicável) é original e da nossa
 * autoria, não correspondendo, portanto, a cópia ou tradução de outros
 * trabalhos já realizados, na FEUP ou fora dela.
 * Mais declaramos que todos os documentos ou código que serviram de base ao
 * desenvolvimento do trabalho descrito no relatório e seus anexos são
 * adequadamente citados e explicados na respectiva secção de referências
 * bibliográficas e que todas as eventuais partes transcritas ou utilizadas de
 * outras fontes estão devidamente assinaladas, identificadas e evidenciadas.
 * Subscrevemos a declaração acima:
 * Fábio Domingo da Silva Rodrigues
 * Rolando Emanuel Lopes Pereira
 *
 * REFERÊNCIAS E FONTES DE INFORMAÇÃO UTILIZADAS:
 *
 * SISTEMA OPERATIVO:
 * Debian 4.0
 * AMBIENTE DE DESENVOLVIMENTO:
 * Vim 7.0.235
 *
 * DATA DE INÍCIO: 20/05/2009
 * DATA DE CONCLUSÃO: 30/05/2009
 *
 * */
#ifndef _TABULEIRO_H_
#define _TABULEIRO_H_

#include <string>
#include <vector>
#include "casa.h"
#include "jogador.h"

class Tabuleiro
{
public:
	Tabuleiro(Jogador& Player1, Jogador& Player2);
    Tabuleiro();

    void addJogadores(Jogador& Player1, Jogador& Player2);
    
    
	~Tabuleiro();
    // TODO: Mudar a interface do add casa para ficar mais semelhante com o que esta no infotabuleiro.txt
	void addCasa(std::string nome, int custo, std::string tipo, int renda_base, int valor_casa, int renda_casa);
    void addCartaSorte(std::string nome, std::string tipo, int custo);
    
	Casa& getCasa(int);
	Casa& getCasa(std::string nome);
	void VisualizarTabuleiro();

    // Permite que os jogadores vao para uma casa sem para pela casa Partida
    void SaltoDirectoParaCasa(Jogador, int posicao);

    /* Devolve um vector de strings com o seguinte formato
       Nome da carta retirada
       Tipo de carta (Lucro, Despesa, MovimentoTabuleiro, Recuo, Avanco)
       Numero da accao (dinheiro a dar, casas a mover, etc.)
     */
        
    void LerFicheiroTabuleiro(std::string);

    void ComprarCasa(Jogador&, Casa&);

    Casa& TirarCartaSorte();
    void AvancarJogador(Jogador*, int);
    
    
    
    
private:
	std::vector<Casa> Casas;
    std::vector<Casa> CartasSorte;

    std::vector< std::vector<int> > GruposCasas;
    
	Jogador Jog1;
	Jogador Jog2;

    // Dinheiro que cada jogador recebe 
    int DinheiroInicial;
    
};

#endif // _TABULEIRO_H_
